package basics

import "fmt"

// FormatPrintf 格式化输出
func FormatPrintf() {

	// 值得注意的是,输出十进制只能通过%d,不能像C语言一样通过%i
	// 除了和C语言一样,可以通过%o、%x输出八进制和十六进制外, 还可以直接通过%b输出二进制
	num := 15
	fmt.Printf("十进制 = %d\n", num)
	fmt.Printf("八进制 = %o\n", num)
	fmt.Printf("十六进制 = %x\n", num)
	fmt.Printf("二进制 = %b\n", num)

	// 除此之外,Go语言还增加了%T控制符, 用于输出值的类型
	type Person struct {
		name string
		age  int
	}
	num1 := 10
	num2 := 3.14
	per := Person{"gaox", 26}
	fmt.Printf("num1 = %T\n", num1) // int
	fmt.Printf("num2 = %T\n", num2) // float64
	fmt.Printf("per = %T\n", per)   // main.Person

	// 除此之外,Go语言还增加了%v控制符,用于打印所有类型数据
	//Go语言中输出某一个值,很少使用%d%f等, 一般都使用%v即可
	// 输出复合类型时会自动生成对应格式后再输出
	type Student struct {
		name string
		age  int
	}

	num11 := 10
	num12 := 3.14
	per1 := Student{"gaox", 26}
	// 此时相当于把%v当做%d
	fmt.Printf("num11 = %v\n", num11) // 10
	// 此时相当于把%v当做%f
	fmt.Printf("num12 = %v\n", num12) // 3.14
	fmt.Printf("per = %T\n", per1)    // main.Student

	// Go语言Printf函数其它特性,如宽度、标志、精度、长度、转移符号等,和C语言一样.
}
